Keeping persistent software state and persistent state of the components used by the software updated and in sync with the current version of the software and the components is a ubiquitous problem in computer science. Suppose, for example, that version one of an application is designed to work with version one of a component. The component may be, for example, a dataset providing input to the application. Suppose further that the creation of the dataset is a non-trivial task. Now suppose that a new version, version two, of the application becomes available. The new version of the application may require a new format for the dataset. Attempting to load the previous version of the dataset into the new version of the application typically results in failure.
It would be helpful if there were an easy way to upgrade persistent state of the revised components to a format compliant with the new version of the components, automatically, so that it “just works”.
Within the context of an object model, typically an application object model is extensible through the creation of user-created objects and objects provided by third-party vendors. It would be helpful if a version of an object model application and a version of components (objects) associated with the object model application could be sensed. It would also be helpful if the presence of new versions of components could be sensed and if new versions of components exist, the persistent state associated with the old versions of the components could be automatically upgraded to a format compliant with the new version. It would also be helpful if this could be done automatically as components are being loaded from persistent storage.